﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;

namespace Sped.Sped
{
    /// <summary>
    /// REGISTRO 0110: REGIMES DE APURAÇÃO DA CONTRIBUIÇÃO SOCIAL E DE
    /// APROPRIAÇÃO DE CRÉDITO
    /// </summary>
    [ClassInterface(ClassInterfaceType.AutoDual)]
    [ProgId("SpedPisCofins.Reg0110")]
    [ComVisible(true)]
    public class Reg0110 : IBloco
    {
        /// <summary>
        /// Código indicador da incidência tributária no período:
        ///     1 – Escrituração de operações com incidência exclusivamente no regime não-cumulativo;
        ///     2 – Escrituração de operações com incidência exclusivamente no regime cumulativo;
        ///     3 – Escrituração de operações com incidência nos regimes não-cumulativo e cumulativo.
        /// </summary>
        public string COD_INC_TRIB { get; set; }
        /// <summary>
        /// Código indicador de método de apropriação de créditos comuns, no caso de incidência no regime nãocumulativo
        ///     (COD_INC_TRIB = 1 ou 3):
        ///     1 – Método de Apropriação Direta;
        ///     2 – Método de Rateio Proporcional (Receita Bruta)
        /// </summary>
        public string IND_APRO_CRED { get; set; }
        /// <summary>
        /// Código indicador do Tipo de Contribuição Apurada no Período
        ///      1 – Apuração da Contribuição Exclusivamente a Alíquota Básica
        ///      2 – Apuração da Contribuição a Alíquotas Específicas
        ///      (Diferenciadas e/ou por Unidade de Medida de Produto)
        /// </summary>
        public string COD_TIPO_CONT { get; set; }

        public override string Layout()
        {
            var Linha = string.Empty;

            Linha += "0110" + this.Delimitador;
            Linha += this.COD_INC_TRIB.Trim() + this.Delimitador;
            Linha += this.IND_APRO_CRED.Trim() + this.Delimitador;
            Linha += this.COD_TIPO_CONT.Trim() + this.Delimitador;

            return Linha.Trim();
        }

        public override bool ValidaRegistro(ref string Erro)
        {
            var ValidacaoOK = true;
            Erro = "";

            if (string.IsNullOrEmpty(this.COD_INC_TRIB) ||
                    (!this.COD_INC_TRIB.Equals("1") && !this.COD_INC_TRIB.Equals("2")
                    && !this.COD_INC_TRIB.Equals("3")))
            {
                Erro += "\r\n* Registro 0110 - Código indicador da incidência tributária inválido.";
                ValidacaoOK = false;
            }
            if (!string.IsNullOrEmpty(this.IND_APRO_CRED) &&
                    (!this.COD_INC_TRIB.Equals("1") && !this.COD_INC_TRIB.Equals("2")))
            {
                Erro += "\r\n* Registro 0110 - Indicador de método de apropriação de créditos inválido.";
                ValidacaoOK = false;
            }
            if (!string.IsNullOrEmpty(this.COD_TIPO_CONT) &&
                    (!this.COD_TIPO_CONT.Equals("1") && !this.COD_TIPO_CONT.Equals("2")))
            {
                Erro += "\r\n* Registro 0110 - Indicador do Tipo de Contribuição Apurada inválido.";
                ValidacaoOK = false;
            }

            if (string.IsNullOrEmpty(this.COD_TIPO_CONT))
                this.COD_TIPO_CONT = string.Empty;
            if (string.IsNullOrEmpty(this.IND_APRO_CRED))
                this.IND_APRO_CRED = string.Empty;

            return ValidacaoOK;
        }
    }
}
